/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package toolbox;

import business.Address;
import business.Customer;
import java.util.HashMap;
import sun.nio.cs.ext.Big5;

/**
 * Classe chargée de valider les informations transmises par le client
 * @author Thomas
 * @version 1.0
 * @see Big-esa-project 2011
 */
public class Validators {

    /**
     * Vérifie que les champs obligatoires ont bien été remplis par le client.
     * Utilise les méthodes statiques privées écrites par Julien Denis
     * pour valider l'email et le numéro de téléphone du client.
     * Renvoie un tableau associatif (Champs => Boolean)
     * @param customer Client dont les infos doivent être validées
     * @return Tableau associatif (Champs => Boolean)
     * @see business.Customer
     */
    public static HashMap<String, Boolean> customer(Customer customer) {
        HashMap<String, Boolean> errorMap = new HashMap<String, Boolean>();

        if (customer.getFirstName().trim().isEmpty())
            errorMap.put("firstName", Boolean.FALSE);

        if (customer.getLastName().trim().isEmpty())
            errorMap.put("lastName", Boolean.FALSE);

        if (!email(customer.getEmail()))
            errorMap.put("email", Boolean.FALSE);

        if (!phoneNumber(customer.getNumTel()))
            errorMap.put("phoneNumber", Boolean.FALSE);

        return errorMap;
    }

    /**
     * Vérifie que les champs obligatoires ont bien été remplis par le client
     * Renvoie un tableau associatif (Champs => Boolean)
     * @param address Adresse du client
     * @return Tableau associatif (Champs => Boolean)
     * @see business.Address
     */
    public static HashMap<String, Boolean> address(Address address) {
        HashMap<String, Boolean> errorMap = new HashMap<String, Boolean>();

        if (address.getLine1().trim().isEmpty())
            errorMap.put("line1", Boolean.FALSE);

        if (address.getZipCode().trim().isEmpty())
            errorMap.put("zipcode", Boolean.FALSE);

        if (address.getCity().trim().isEmpty())
            errorMap.put("city", Boolean.FALSE);

        return errorMap;
    }

    /**
     * @author Julien Denis (big-esa-project 2010-2011)
     * Méthode vérifiant qu'une chaîne de caractères est correctement formatée pour être un e-mail
     * @param email définit un String censé représenter un e-mail
     * @return true si le string passé en paramètre correspond à la regular expression d'un e-mail
     */
    private static boolean email(String email) {
        return (email.trim().matches("^[_a-zA-Z0-9-]+(\\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\\.[a-zA-Z0-9-]+)+$")) ? true : false;
    }

    /**
     * @author Julien Denis (big-esa-project 2010-2011)
     * Méthode vérifiant qu'une chaîne de caractères est correctement formatée pour être un numéro de téléphone (au moins 8 chiffres)
     * @param phone définit un String censé représenter un numéro de téléphone
     * @return true si le string passé en paramètre correspond à la regular expression d'un numéro de téléphone (au moins 8 chiffres)
     */
    private static boolean phoneNumber(String phoneNumber) {
        return (phoneNumber.trim().matches("[^0-9]*[0-9][^0-9]*[0-9][^0-9]*[0-9][^0-9]*[0-9][^0-9]*[0-9][^0-9]*[0-9][^0-9]*[0-9][^0-9]*[0-9].*")) ? true : false;
    }

}